/**
 * <copyright>
 * </copyright>
 *
 * $Id$
 */
package REA.impl;

import REA.Commitment;
import REA.EconomicAgent;
import REA.EconomicEvent;
import REA.EconomicResource;
import REA.PolicyRelationshipType;
import REA.REAAttribute;
import REA.REAFactory;
import REA.REAOperationalEntity;
import REA.REAPackage;
import REA.REAPolicyEntity;
import REA.REAPolicyRelation;
import REA.REARelations;
import REA.REAelement;
import REA.REAmodel;
import REA.duality;
import REA.fulfillment;
import REA.participation;
import REA.stockflow;

import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EEnum;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EReference;

import org.eclipse.emf.ecore.impl.EPackageImpl;

/**
 * <!-- begin-user-doc -->
 * An implementation of the model <b>Package</b>.
 * <!-- end-user-doc -->
 * @generated
 */
public class REAPackageImpl extends EPackageImpl implements REAPackage {
	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass economicResourceEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass economicEventEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass economicAgentEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass stockflowEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass participationEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass reaOperationalEntityEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass commitmentEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass fulfillmentEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass reaRelationsEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass dualityEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass reaAttributeEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass reaPolicyRelationEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass reaPolicyEntityEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass reAmodelEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass reAelementEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EEnum policyRelationshipTypeEEnum = null;

	/**
	 * Creates an instance of the model <b>Package</b>, registered with
	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
	 * package URI value.
	 * <p>Note: the correct way to create the package is via the static
	 * factory method {@link #init init()}, which also performs
	 * initialization of the package, or returns the registered package,
	 * if one already exists.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see org.eclipse.emf.ecore.EPackage.Registry
	 * @see REA.REAPackage#eNS_URI
	 * @see #init()
	 * @generated
	 */
	private REAPackageImpl() {
		super(eNS_URI, REAFactory.eINSTANCE);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private static boolean isInited = false;

	/**
	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
	 * 
	 * <p>This method is used to initialize {@link REAPackage#eINSTANCE} when that field is accessed.
	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #eNS_URI
	 * @see #createPackageContents()
	 * @see #initializePackageContents()
	 * @generated
	 */
	public static REAPackage init() {
		if (isInited) return (REAPackage)EPackage.Registry.INSTANCE.getEPackage(REAPackage.eNS_URI);

		// Obtain or create and register package
		REAPackageImpl theREAPackage = (REAPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof REAPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new REAPackageImpl());

		isInited = true;

		// Create package meta-data objects
		theREAPackage.createPackageContents();

		// Initialize created meta-data
		theREAPackage.initializePackageContents();

		// Mark meta-data to indicate it can't be changed
		theREAPackage.freeze();

  
		// Update the registry and return the package
		EPackage.Registry.INSTANCE.put(REAPackage.eNS_URI, theREAPackage);
		return theREAPackage;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getEconomicResource() {
		return economicResourceEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getEconomicEvent() {
		return economicEventEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getEconomicAgent() {
		return economicAgentEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getstockflow() {
		return stockflowEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getstockflow_EconomicResource() {
		return (EReference)stockflowEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getstockflow_EconomicEvent() {
		return (EReference)stockflowEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getparticipation() {
		return participationEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getparticipation_EconomicEvent() {
		return (EReference)participationEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getparticipation_EconomicAgent() {
		return (EReference)participationEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getREAOperationalEntity() {
		return reaOperationalEntityEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getREAOperationalEntity_Attributes() {
		return (EReference)reaOperationalEntityEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getREAOperationalEntity_Name() {
		return (EAttribute)reaOperationalEntityEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getCommitment() {
		return commitmentEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getfulfillment() {
		return fulfillmentEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getfulfillment_EconomicEvent() {
		return (EReference)fulfillmentEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getfulfillment_Commitment() {
		return (EReference)fulfillmentEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getREARelations() {
		return reaRelationsEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getREARelations_Attributes() {
		return (EReference)reaRelationsEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getREARelations_Name() {
		return (EAttribute)reaRelationsEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getduality() {
		return dualityEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getduality_InEconomicEvent() {
		return (EReference)dualityEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getduality_OutEconomicEvent() {
		return (EReference)dualityEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getREAAttribute() {
		return reaAttributeEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getREAAttribute_Name() {
		return (EAttribute)reaAttributeEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getREAPolicyRelation() {
		return reaPolicyRelationEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getREAPolicyRelation_OperationalEntity() {
		return (EReference)reaPolicyRelationEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getREAPolicyRelation_PolicyEntity() {
		return (EReference)reaPolicyRelationEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getREAPolicyRelation_PolicyRelationshipType() {
		return (EAttribute)reaPolicyRelationEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getREAPolicyRelation_Attributes() {
		return (EReference)reaPolicyRelationEClass.getEStructuralFeatures().get(3);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getREAPolicyRelation_Name() {
		return (EAttribute)reaPolicyRelationEClass.getEStructuralFeatures().get(4);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getREAPolicyEntity() {
		return reaPolicyEntityEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getREAPolicyEntity_Name() {
		return (EAttribute)reaPolicyEntityEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getREAPolicyEntity_Attributes() {
		return (EReference)reaPolicyEntityEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getREAmodel() {
		return reAmodelEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getREAmodel_Contains() {
		return (EReference)reAmodelEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getREAelement() {
		return reAelementEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getREAelement_Container() {
		return (EReference)reAelementEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EEnum getPolicyRelationshipType() {
		return policyRelationshipTypeEEnum;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public REAFactory getREAFactory() {
		return (REAFactory)getEFactoryInstance();
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private boolean isCreated = false;

	/**
	 * Creates the meta-model objects for the package.  This method is
	 * guarded to have no affect on any invocation but its first.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void createPackageContents() {
		if (isCreated) return;
		isCreated = true;

		// Create classes and their features
		economicResourceEClass = createEClass(ECONOMIC_RESOURCE);

		economicEventEClass = createEClass(ECONOMIC_EVENT);

		economicAgentEClass = createEClass(ECONOMIC_AGENT);

		stockflowEClass = createEClass(STOCKFLOW);
		createEReference(stockflowEClass, STOCKFLOW__ECONOMIC_RESOURCE);
		createEReference(stockflowEClass, STOCKFLOW__ECONOMIC_EVENT);

		participationEClass = createEClass(PARTICIPATION);
		createEReference(participationEClass, PARTICIPATION__ECONOMIC_EVENT);
		createEReference(participationEClass, PARTICIPATION__ECONOMIC_AGENT);

		reaOperationalEntityEClass = createEClass(REA_OPERATIONAL_ENTITY);
		createEReference(reaOperationalEntityEClass, REA_OPERATIONAL_ENTITY__ATTRIBUTES);
		createEAttribute(reaOperationalEntityEClass, REA_OPERATIONAL_ENTITY__NAME);

		commitmentEClass = createEClass(COMMITMENT);

		fulfillmentEClass = createEClass(FULFILLMENT);
		createEReference(fulfillmentEClass, FULFILLMENT__ECONOMIC_EVENT);
		createEReference(fulfillmentEClass, FULFILLMENT__COMMITMENT);

		reaRelationsEClass = createEClass(REA_RELATIONS);
		createEReference(reaRelationsEClass, REA_RELATIONS__ATTRIBUTES);
		createEAttribute(reaRelationsEClass, REA_RELATIONS__NAME);

		dualityEClass = createEClass(DUALITY);
		createEReference(dualityEClass, DUALITY__IN_ECONOMIC_EVENT);
		createEReference(dualityEClass, DUALITY__OUT_ECONOMIC_EVENT);

		reaAttributeEClass = createEClass(REA_ATTRIBUTE);
		createEAttribute(reaAttributeEClass, REA_ATTRIBUTE__NAME);

		reaPolicyRelationEClass = createEClass(REA_POLICY_RELATION);
		createEReference(reaPolicyRelationEClass, REA_POLICY_RELATION__OPERATIONAL_ENTITY);
		createEReference(reaPolicyRelationEClass, REA_POLICY_RELATION__POLICY_ENTITY);
		createEAttribute(reaPolicyRelationEClass, REA_POLICY_RELATION__POLICY_RELATIONSHIP_TYPE);
		createEReference(reaPolicyRelationEClass, REA_POLICY_RELATION__ATTRIBUTES);
		createEAttribute(reaPolicyRelationEClass, REA_POLICY_RELATION__NAME);

		reaPolicyEntityEClass = createEClass(REA_POLICY_ENTITY);
		createEAttribute(reaPolicyEntityEClass, REA_POLICY_ENTITY__NAME);
		createEReference(reaPolicyEntityEClass, REA_POLICY_ENTITY__ATTRIBUTES);

		reAmodelEClass = createEClass(RE_AMODEL);
		createEReference(reAmodelEClass, RE_AMODEL__CONTAINS);

		reAelementEClass = createEClass(RE_AELEMENT);
		createEReference(reAelementEClass, RE_AELEMENT__CONTAINER);

		// Create enums
		policyRelationshipTypeEEnum = createEEnum(POLICY_RELATIONSHIP_TYPE);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private boolean isInitialized = false;

	/**
	 * Complete the initialization of the package and its meta-model.  This
	 * method is guarded to have no affect on any invocation but its first.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void initializePackageContents() {
		if (isInitialized) return;
		isInitialized = true;

		// Initialize package
		setName(eNAME);
		setNsPrefix(eNS_PREFIX);
		setNsURI(eNS_URI);

		// Create type parameters

		// Set bounds for type parameters

		// Add supertypes to classes
		economicResourceEClass.getESuperTypes().add(this.getREAOperationalEntity());
		economicEventEClass.getESuperTypes().add(this.getREAOperationalEntity());
		economicAgentEClass.getESuperTypes().add(this.getREAOperationalEntity());
		stockflowEClass.getESuperTypes().add(this.getREARelations());
		participationEClass.getESuperTypes().add(this.getREARelations());
		reaOperationalEntityEClass.getESuperTypes().add(this.getREAelement());
		commitmentEClass.getESuperTypes().add(this.getREAOperationalEntity());
		fulfillmentEClass.getESuperTypes().add(this.getREARelations());
		reaRelationsEClass.getESuperTypes().add(this.getREAelement());
		dualityEClass.getESuperTypes().add(this.getREARelations());
		reaAttributeEClass.getESuperTypes().add(this.getREAelement());
		reaPolicyRelationEClass.getESuperTypes().add(this.getREAelement());
		reaPolicyEntityEClass.getESuperTypes().add(this.getREAelement());

		// Initialize classes and features; add operations and parameters
		initEClass(economicResourceEClass, EconomicResource.class, "EconomicResource", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

		initEClass(economicEventEClass, EconomicEvent.class, "EconomicEvent", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

		initEClass(economicAgentEClass, EconomicAgent.class, "EconomicAgent", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

		initEClass(stockflowEClass, stockflow.class, "stockflow", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getstockflow_EconomicResource(), this.getEconomicResource(), null, "economicResource", null, 1, 1, stockflow.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getstockflow_EconomicEvent(), this.getEconomicEvent(), null, "economicEvent", null, 1, 1, stockflow.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(participationEClass, participation.class, "participation", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getparticipation_EconomicEvent(), this.getEconomicEvent(), null, "economicEvent", null, 1, 1, participation.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getparticipation_EconomicAgent(), this.getEconomicAgent(), null, "economicAgent", null, 1, 1, participation.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(reaOperationalEntityEClass, REAOperationalEntity.class, "REAOperationalEntity", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getREAOperationalEntity_Attributes(), this.getREAAttribute(), null, "attributes", null, 0, -1, REAOperationalEntity.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getREAOperationalEntity_Name(), ecorePackage.getEString(), "name", null, 0, 1, REAOperationalEntity.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(commitmentEClass, Commitment.class, "Commitment", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

		initEClass(fulfillmentEClass, fulfillment.class, "fulfillment", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getfulfillment_EconomicEvent(), this.getEconomicEvent(), null, "economicEvent", null, 1, 1, fulfillment.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getfulfillment_Commitment(), this.getCommitment(), null, "commitment", null, 1, 1, fulfillment.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(reaRelationsEClass, REARelations.class, "REARelations", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getREARelations_Attributes(), this.getREAAttribute(), null, "attributes", null, 0, -1, REARelations.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getREARelations_Name(), ecorePackage.getEString(), "name", null, 0, 1, REARelations.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(dualityEClass, duality.class, "duality", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getduality_InEconomicEvent(), this.getEconomicEvent(), null, "inEconomicEvent", null, 1, 1, duality.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getduality_OutEconomicEvent(), this.getEconomicEvent(), null, "outEconomicEvent", null, 1, 1, duality.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(reaAttributeEClass, REAAttribute.class, "REAAttribute", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getREAAttribute_Name(), ecorePackage.getEString(), "name", null, 0, 1, REAAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(reaPolicyRelationEClass, REAPolicyRelation.class, "REAPolicyRelation", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getREAPolicyRelation_OperationalEntity(), this.getREAOperationalEntity(), null, "operationalEntity", null, 1, 1, REAPolicyRelation.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getREAPolicyRelation_PolicyEntity(), this.getREAPolicyEntity(), null, "policyEntity", null, 1, 1, REAPolicyRelation.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getREAPolicyRelation_PolicyRelationshipType(), this.getPolicyRelationshipType(), "policyRelationshipType", null, 0, 1, REAPolicyRelation.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getREAPolicyRelation_Attributes(), this.getREAAttribute(), null, "attributes", null, 0, -1, REAPolicyRelation.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getREAPolicyRelation_Name(), ecorePackage.getEString(), "name", null, 0, 1, REAPolicyRelation.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(reaPolicyEntityEClass, REAPolicyEntity.class, "REAPolicyEntity", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getREAPolicyEntity_Name(), ecorePackage.getEString(), "name", null, 0, 1, REAPolicyEntity.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getREAPolicyEntity_Attributes(), this.getREAAttribute(), null, "attributes", null, 0, -1, REAPolicyEntity.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(reAmodelEClass, REAmodel.class, "REAmodel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getREAmodel_Contains(), this.getREAelement(), this.getREAelement_Container(), "contains", null, 0, -1, REAmodel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(reAelementEClass, REAelement.class, "REAelement", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getREAelement_Container(), this.getREAmodel(), this.getREAmodel_Contains(), "container", null, 0, 1, REAelement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		// Initialize enums and add enum literals
		initEEnum(policyRelationshipTypeEEnum, PolicyRelationshipType.class, "PolicyRelationshipType");
		addEEnumLiteral(policyRelationshipTypeEEnum, PolicyRelationshipType.TYPIFICATION);
		addEEnumLiteral(policyRelationshipTypeEEnum, PolicyRelationshipType.GROUPING);

		// Create resource
		createResource(eNS_URI);
	}

} //REAPackageImpl
